package com.mr.base.service;

import java.util.List;

import com.mr.base.dao.ItemDao;
import com.mr.base.domain.Item;
import com.mr.base.domain.ItemType;
import com.skysz.framework.dao.DomainDao;
import com.skysz.framework.service.AbstractBaseService;
import com.skysz.framework.utils.Result;

/**
 * 项目管理业务实现类
 * @author zhaow
 */
public class ItemService extends AbstractBaseService<Item> {
	private static final long serialVersionUID = 1L;
	private ItemDao itemDao;


	public void setItemDao(ItemDao itemDao) {
		this.itemDao = itemDao;
	}
	@Override
	public DomainDao<Item> getDomainDao() {
		return itemDao;
	}
	/**
	 * 新增项目
	 * @param t
	 */
	public Result insertItem(Item t) {
		Result r = new Result();
		r.setCode(Result.CODE_FAILURE);
		
		// 校验 名称，快捷编码是否唯一
		Item temp = new Item(); 
		temp.setQcode(t.getQcode());
		temp.setOrg(t.getOrg()) ;
		temp.setEnable(true);
		if (!this.itemDao.isUnique(temp) ) {
			r.setInfo("快捷码重复。");
			return r;
		}
		
		temp = new Item(); 
		temp.setName(t.getName());
		temp.setOrg(t.getOrg()) ;
		temp.setEnable(true);
		if (!this.itemDao.isUnique(temp) ) {
			r.setInfo("项目名称重复。");
			return r;
		}
		
		this.itemDao.insert(t);
		r.setCode(Result.CODE_SUCCESS);
		return r;
	}
	
	/**
	 * 修改项目
	 * @param t
	 */
	public Result updateItem(Item t) {
		Result r = new Result();
		r.setCode(Result.CODE_FAILURE);
		
		// 校验 名称，快捷编码是否唯一
		Item temp = new Item(); 
		temp.setId(t.getId());
		temp.setQcode(t.getQcode());
		temp.setOrg(t.getOrg()) ;
		temp.setEnable(true);
		if (!this.itemDao.isUniqueExceptSelf(temp) ) {
			r.setInfo("快捷码重复。");
			return r;
		}
		
		temp = new Item(); 
		temp.setId(t.getId());
		temp.setName(t.getName());
		temp.setOrg(t.getOrg()) ;
		temp.setEnable(true);
		if (!this.itemDao.isUniqueExceptSelf(temp) ) {
			r.setInfo("项目名称重复。");
			return r;
		}
		
		
		Item ft = (Item) this.utilsDao.get(Item.class, t.getId());
		ft.setName(t.getName());
		ft.setPrice(t.getPrice());
		ft.setItemType(t.getItemType());
		ft.setQcode(t.getQcode());
		
		this.itemDao.update(ft);
		r.setCode(Result.CODE_SUCCESS);
		return r;
	}
	
	/**
	 * 禁用项目
	 * @param itemId
	 */
	public void disableItem(Long itemId) {
		this.itemDao.disableItem(itemId);
	}
	
	/**
	 * 得到下级所有子节点和自己
	 */
	public List<ItemType> findItemTypeTree() {
		return this.itemDao.findItemTypeTree();
	}
	
	/**
	 * 新增项目类型
	 * @param it
	 */
	public void insertItemType(ItemType it) {
		Long parentId = it.getParent().getId();
		//查询父节点信息
		ItemType parentItem = (ItemType) this.utilsDao.get(ItemType.class, parentId);
		String h = parentItem.getHiberarchy();
		
		//查询父节点下存在多少子节点
		int count = this.itemDao.getCountByParentId(parentId);
		if (count < 9)
			h = h + "00" + count;
		if (count >= 10)
			h = h + "0" + count;
		
		it.setHiberarchy(h);	
		it.setRootId(parentItem.getRootId());
		it.setLevel(parentItem.getLevel()+1);
		it.setLevelIndex(it.getLevel());
		it.setIsLeaf(true);
		it.setEnable(true);
		
		//将父节点是否叶子节点字段跟新为否
		parentItem.setIsLeaf(false);
		this.utilsDao.update(parentItem);
		
		//保存子节点
		this.utilsDao.insert(it);
	}
	
	/**
	 * 修改项目类型
	 * @param it
	 */
	public void updateItemType(ItemType it) {
		ItemType ft = (ItemType) this.utilsDao.get(ItemType.class, it.getId());
		ft.setName(it.getName());
		this.utilsDao.update(ft);
	}
	
	/**
	 * 禁用项目类型
	 * @param itemId
	 */
	public void disableItemType(Long itemTypeId) {
		this.itemDao.disableItemType(itemTypeId);
	}
	/**
	 * 通過id查詢項目類型
	 * @param itemTypeId
	 * @return
	 */
	public ItemType findItemTypeById(Long itemTypeId) {
		return (ItemType) this.utilsDao.get(ItemType.class, itemTypeId);
	}
	
	/**
	 * 查询项目
	 * @param itemId
	 * @return
	 */
	public Item loadItemById(Long itemId) {
		return this.itemDao.loadItemById(itemId);
	}
}
